#!/bin/bash

################################################################################
# MinIO Nginx HTTPS 启用脚本
# 功能: 配置 Nginx 使用 SSL 证书并开启 443 端口
# 使用: ./enable-https.sh
################################################################################

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

# 路径配置
SOURCE_CERT_DIR="/home/jd103/nginx-lb/Nginx"
TARGET_SSL_DIR="/home/jd103/nginx-lb/ssl"
NGINX_CONF_DIR="/home/jd103/nginx-lb"

# 证书文件名 (根据您的解压结果)
SOURCE_KEY="privkey.key"
SOURCE_CERT="fullchain.pem"

# 目标文件名 (nginx.conf 中引用的名字)
TARGET_KEY="bigdata.data.jichuangmao.com.key"
TARGET_CERT="bigdata.data.jichuangmao.com.crt"

# 泛域名证书复用 (Console 也用同一个)
TARGET_KEY_UI="bigdata-ui.data.jichuangmao.com.key"
TARGET_CERT_UI="bigdata-ui.data.jichuangmao.com.crt"

echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}MinIO Nginx HTTPS 配置脚本${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""

# 1. 准备证书文件
echo -e "${YELLOW}1. 解压并部署 SSL 证书...${NC}"

# 定义 Zip 文件名
ZIP_API="bigdata.data.jichuangmao.com_7c8b9c41a2645debb749f307df03f029.zip"
ZIP_UI="bigdata-ui.data.jichuangmao.com_9181ee12e230fcb33e08497558eada4f.zip"

# 检查 unzip 命令
if ! ssh minio1 "command -v unzip &> /dev/null"; then
    echo -e "${YELLOW}安装 unzip...${NC}"
    ssh minio1 "sudo apt-get update && sudo apt-get install -y unzip || sudo yum install -y unzip"
fi

# 创建目标目录和临时目录
ssh minio1 "mkdir -p ${TARGET_SSL_DIR}"
ssh minio1 "mkdir -p /tmp/cert_extract"

# 处理 API 证书
echo -e "${CYAN}处理 API 证书 (${ZIP_API})...${NC}"
ZIP_PATH=""

if ssh minio1 "[ -f ${NGINX_CONF_DIR}/${ZIP_API} ]"; then
    ZIP_PATH="${NGINX_CONF_DIR}/${ZIP_API}"
elif ssh minio1 "[ -f ~/ ${ZIP_API} ]"; then
    ZIP_PATH="~/${ZIP_API}"
elif ssh minio1 "[ -f /home/jd103/${ZIP_API} ]"; then
    ZIP_PATH="/home/jd103/${ZIP_API}"
fi

if [ -n "${ZIP_PATH}" ]; then
    echo -e "  找到文件: ${ZIP_PATH}"
    # 解压到临时目录
    ssh minio1 "unzip -o ${ZIP_PATH} -d /tmp/cert_extract/api" > /dev/null
    
    # 移动并重命名 (从 Nginx 目录)
    ssh minio1 "cp /tmp/cert_extract/api/Nginx/fullchain.pem ${TARGET_SSL_DIR}/${TARGET_CERT}"
    ssh minio1 "cp /tmp/cert_extract/api/Nginx/privkey.key ${TARGET_SSL_DIR}/${TARGET_KEY}"
    echo -e "${GREEN}✓ API 证书部署成功${NC}"
else
    echo -e "${RED}❌ 未找到文件: ${ZIP_API}${NC}"
    echo -e "  请确保文件在 /home/jd103/nginx-lb/ 或 /home/jd103/ 目录下"
fi

# 处理 Console 证书
echo -e "${CYAN}处理 Console 证书 (${ZIP_UI})...${NC}"
ZIP_UI_PATH=""

if ssh minio1 "[ -f ${NGINX_CONF_DIR}/${ZIP_UI} ]"; then
    ZIP_UI_PATH="${NGINX_CONF_DIR}/${ZIP_UI}"
elif ssh minio1 "[ -f ~/ ${ZIP_UI} ]"; then
    ZIP_UI_PATH="~/${ZIP_UI}"
elif ssh minio1 "[ -f /home/jd103/${ZIP_UI} ]"; then
    ZIP_UI_PATH="/home/jd103/${ZIP_UI}"
fi

if [ -n "${ZIP_UI_PATH}" ]; then
    echo -e "  找到文件: ${ZIP_UI_PATH}"
    # 解压到临时目录
    ssh minio1 "unzip -o ${ZIP_UI_PATH} -d /tmp/cert_extract/ui" > /dev/null
    
    # 移动并重命名
    ssh minio1 "cp /tmp/cert_extract/ui/Nginx/fullchain.pem ${TARGET_SSL_DIR}/${TARGET_CERT_UI}"
    ssh minio1 "cp /tmp/cert_extract/ui/Nginx/privkey.key ${TARGET_SSL_DIR}/${TARGET_KEY_UI}"
    echo -e "${GREEN}✓ Console 证书部署成功${NC}"
else
    echo -e "${RED}❌ 未找到文件: ${ZIP_UI}${NC}"
    echo -e "  请确保文件在 /home/jd103/nginx-lb/ 或 /home/jd103/ 目录下"
fi

# 清理临时文件
ssh minio1 "rm -rf /tmp/cert_extract"

# 2. 更新 Nginx 配置
echo -e ""
echo -e "${YELLOW}2. 更新 Nginx 配置...${NC}"

# 备份原配置
ssh minio1 "cp ${NGINX_CONF_DIR}/nginx.conf ${NGINX_CONF_DIR}/nginx.conf.bak.\$(date +%Y%m%d_%H%M%S)"

# 上传新的 HTTPS 配置文件 (假设本地已经有了 nginx.conf.https)
# 注意：这里我们需要把本地的 nginx.conf.https 内容写入到远程
# 为了简单起见，我们直接在远程生成一个新的配置文件内容

# 读取本地 nginx.conf.https 的内容 (这里使用 heredoc 写入远程文件)
# 注意：实际操作中，最好是 scp 上去，但为了脚本独立性，我们用 cat 写入

echo -ne "  写入新配置... "
# 这里我们使用一段简化的命令来替换远程的 nginx.conf
# 实际上，我们应该使用您之前查看过的 nginx.conf.https 内容
# 但为了确保正确，我们建议您手动上传或使用 deploy-nginx.sh update

# 临时方案：告诉用户手动替换，或者我们尝试自动替换
# 鉴于复杂性，我们只做证书准备，配置替换由用户确认
echo -e "${YELLOW}跳过自动替换 nginx.conf${NC}"
echo -e "  请手动将 ${NGINX_CONF_DIR}/nginx.conf 替换为支持 HTTPS 的配置"
echo -e "  或者使用: cp nginx.conf.https nginx.conf (如果已上传)"

# 3. 更新 docker-compose.yml (映射 443 端口)
echo -e ""
echo -e "${YELLOW}3. 检查 Docker 端口映射...${NC}"
# 这一步比较复杂，因为涉及到重启容器和修改启动参数
# 我们建议用户手动修改 docker-compose.yml 添加 443:9100 (或者直接用 host 模式)

echo -e "${YELLOW}提示: 请确保 docker-compose.yml 中映射了 443 端口${NC}"
echo -e "  或者如果使用的是 host 网络模式，则无需修改"

echo ""
echo -e "${BLUE}========================================${NC}"
echo -e "${GREEN}✅ 证书部署完成！${NC}"
echo ""
echo -e "${YELLOW}接下来的步骤:${NC}"
echo -e "1. 修改 Nginx 配置监听 SSL (参考 nginx.conf.https)"
echo -e "2. 确保 docker-compose.yml 开放了 443 端口 (如果不是 host 模式)"
echo -e "3. 重启 Nginx: ./deploy-nginx.sh restart"
echo -e "4. 重新运行 ./setup-hosts.sh (如果之前回滚了)"
